---
title: "Per-user paywall access decision"
method: GET
path: "/paywall/decision/[nodeId]"
tags: ["Paywall"]
---

# Per-user paywall access decision

`GET /paywall/decision/[nodeId]`

## Request

- Base URL: `http://dev.theverge.com:3002/api`
- URL: `http://dev.theverge.com:3002/api/paywall/decision/[nodeId]`
- Auth: none declared

Returns an access decision for the given post. Anonymous requests are brokered via Zephr with a null JWT. Entitled members resolve to grant without a Zephr call. Logged-in non-entitled mobile users are brokered via Zephr. Auth is optional (web-cookie session or mobile app-token; missing → anonymous). Response is no-store; never shared-cached.

## Path parameters

- `nodeId` string, required

## Query parameters

- `nodeId` string, required
- `path` string, required
- `categories` string[]

## Response `200`

Paywall access decision

- object
  - `data` PaywallDecision, required
    - `reason` 'entitlement' | 'metered' | 'restricted_category' | 'anonymous', required
    - `paywall` object, required
      - `show` boolean, required
      - `variant` string
      - `title` string
      - `body` string
      - `button` object
        - `label` string, required
        - `action` 'subscribe' | 'register' | 'login', required
        - `url` string

## Other responses

- `400`: Invalid input parameters
- `429`: Rate limit exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/theverge/apis/the-verge-api-documentation.md) - [All operations](https://skmtc.dev/theverge/apis/the-verge-api-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/theverge/apis/the-verge-api-documentation/revisions/f44a9b8ebfc3?raw)
